import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-03-21
 * Time: 17:59
 */

// 该类封装数据库连接
// 作为一个工具类 提供 static 方法供其他类使用
public class DBUtil {
    // 静态成员跟随类对象
    // 静态成员唯一实例 (等同于单利模式中的恶汉模式, 在还未调用的时候就已经创建好实例了)
    private static DataSource dataSource = new MysqlDataSource();

    static {
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/messagewall?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("lyf2021");
    }

    // 通过该方法建立连接
    public static Connection getConnection()  {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    // 通过该方法断开连接, 释放资源( 按照每个资源创建的顺序, 相反顺序释放资源)
    public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) {
        // 此处三个 try catch 分开写,避免前面的异常导致后面的代码不能执行

        if(resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        if(statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        if(connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }

        }
    }

}
